# Лекция: Рекурсивные функции в Java

Рекурсивная функция в Java - это функция, которая вызывает саму себя в своем теле. Рекурсивные функции используются для решения задач, которые можно разбить на более мелкие подзадачи одного и того же типа.

Вот простой пример рекурсивной функции, которая вычисляет факториал числа:

```java
int factorial(int n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}
```

Каждый рекурсивный вызов функции создает новый контекст выполнения, который сохраняется в стеке вызовов. Поэтому глубокая рекурсия может привести к переполнению стека.

---

# Практические задания

1. **Создайте рекурсивную функцию, которая вычисляет факториал числа.** (Сложность: 1/5)
```java
int factorial(int n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}
```

2. **Создайте рекурсивную функцию, которая вычисляет n-е число Фибоначчи.** (Сложность: 2/5)
```java
int fibonacci(int n) {
    if (n <= 1) {
        return n;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}
```

3. **Создайте рекурсивную функцию, которая вычисляет сумму чисел от 1 до n.** (Сложность: 2/5)
```java
int sum(int n) {
    if (n == 1) {
        return 1;
    } else {
        return n + sum(n - 1);
    }
}
```

4. **Создайте рекурсивную функцию, которая вычисляет степень числа.** (Сложность: 3/5)
```java
int power(int base, int exponent) {
    if (exponent == 0) {
        return 1;
    } else {
        return base * power(base, exponent - 1);
    }
}
```

5. **Создайте рекурсивную функцию, которая обращает строку.** (Сложность: 3/5)
```java
String reverse(String str) {
    if (str.isEmpty()) {
        return str;
    } else {
        return reverse(str.substring(1)) + str.charAt(0);
    }
}
```